package org.osiris.client.utils;

import java.util.List;

import org.osiris.client.model.*;
import org.osiris.client.services.ComboService;

import com.extjs.gxt.ui.client.store.ListStore;
import com.extjs.gxt.ui.client.widget.form.ComboBox;
import com.extjs.gxt.ui.client.widget.form.ComboBox.TriggerAction;
import com.google.gwt.core.client.GWT;
import com.google.gwt.user.client.rpc.AsyncCallback;

public class MasterGenerator {

	public static ListStore <CategoriaViewBean>categorias=new ListStore<CategoriaViewBean>();
	public static ListStore <CategoriaViewBean>subcategorias=new ListStore<CategoriaViewBean>();
	public static ListStore <ComplejidadrequisitoViewBean>complejidad=new ListStore<ComplejidadrequisitoViewBean>();
	public static ListStore <EstadorequisitoViewBean>estados=new ListStore<EstadorequisitoViewBean>();
	public static ListStore <ProyectoViewBean>proyectos=new ListStore<ProyectoViewBean>();
	public static ListStore <TipoRequisitoViewBean>tipos=new ListStore<TipoRequisitoViewBean>();
	public static ListStore <UsuarioViewBean>usuarios=new ListStore<UsuarioViewBean>();
	public static ListStore <IncertidumbreViewBean>incertidumbre=new ListStore<IncertidumbreViewBean>();
	public static ListStore <PrioridadViewBean>prioridades=new ListStore<PrioridadViewBean>();
	public static ListStore <TipoRecursoViewBean>tiposRecurso=new ListStore<TipoRecursoViewBean>();
	public static ListStore <EstadoProyectoViewBean>estadosP=new ListStore<EstadoProyectoViewBean>();
	public static ListStore <EstadoProyectoViewBean>estadosP2=new ListStore<EstadoProyectoViewBean>();
	
	
	
	protected static org.osiris.client.services.ComboServiceAsync combosService = GWT.create(ComboService.class);
	
	static {
		getComboCategorias();
		getComplejidadCombo();
		getEstadosCombo();
		getCombosProyectos();
		
		
		
	};
	public static synchronized ComboBox<EstadoProyectoViewBean> getCombosEstadoProyecto(){
		if(estadosP!=null && estadosP.getModels().size()==0){
			estadosP.add(new EstadoProyectoViewBean(1L,"Analisis Viabilidad"));
			estadosP.add(new EstadoProyectoViewBean(2L,"Estimando"));
			estadosP.add(new EstadoProyectoViewBean(3L,"Analizando"));
			estadosP.add(new EstadoProyectoViewBean(4L,"Dise\u00F1ando"));
			estadosP.add(new EstadoProyectoViewBean(5L,"Constryendo"));
			estadosP.add(new EstadoProyectoViewBean(6L,"Probando"));
			estadosP.add(new EstadoProyectoViewBean(7L,"Cerrado"));
			
			
		}
		ComboBox <EstadoProyectoViewBean>tipo=new ComboBox<EstadoProyectoViewBean>();		
		tipo.setAllowBlank(true);
		
		tipo.setStore(estadosP);
		tipo.setSize("150px", "22px");
		tipo.setDisplayField("nombre"); 
		tipo.setTypeAhead(true); 	
		tipo.setTriggerAction(TriggerAction.ALL);
		return tipo;	
	}
	public static synchronized ComboBox<EstadoProyectoViewBean> getCombosEstadoRequisitoEnProyecto(){
		if(estadosP2!=null && estadosP2.getModels().size()==0){
			estadosP2.add(new EstadoProyectoViewBean(1L,"Elicitado"));
			estadosP2.add(new EstadoProyectoViewBean(2L,"Aceptado"));
			estadosP2.add(new EstadoProyectoViewBean(3L,"Rechazado"));		
		}
		ComboBox <EstadoProyectoViewBean>tipo=new ComboBox<EstadoProyectoViewBean>();		
		tipo.setAllowBlank(true);		
		tipo.setStore(estadosP2);
		tipo.setSize("150px", "22px");
		tipo.setDisplayField("nombre"); 
		tipo.setTypeAhead(true); 	
		tipo.setTriggerAction(TriggerAction.ALL);
		return tipo;	
	}
	public static synchronized ComboBox<TipoRecursoViewBean> getComboTiposRecurso(){

		if(tiposRecurso!=null && tiposRecurso.getModels().size()==0){

			combosService.getTiposRecurso(new AsyncCallback<List<TipoRecursoViewBean>>() {

				public void onFailure(Throwable caught) {
					//	Window.alert("FALLO");
				}

				public void onSuccess(List<TipoRecursoViewBean> result) {
					tiposRecurso.removeAll();
					tiposRecurso.add(result);
				}
			});
		}
		ComboBox <TipoRecursoViewBean>tipo=new ComboBox<TipoRecursoViewBean>();		
		
		
		tipo.setStore(tiposRecurso);
		tipo.setSize("150px", "22px");
		tipo.setDisplayField("nombre"); 
		tipo.setTypeAhead(true); 	
		tipo.setTriggerAction(TriggerAction.ALL);
		return tipo;	
	}
	public static synchronized ComboBox<PrioridadViewBean> getComboPrioridad(){

		if(prioridades!=null && prioridades.getModels().size()==0){

			combosService.getPrioridades(new AsyncCallback<List<PrioridadViewBean>>() {

				public void onFailure(Throwable caught) {
					//	Window.alert("FALLO");
				}

				public void onSuccess(List<PrioridadViewBean> result) {
					prioridades.removeAll();
					prioridades.add(result);
				}
			});
		}
		ComboBox <PrioridadViewBean>tipo=new ComboBox<PrioridadViewBean>();		
		
		tipo.setStore(prioridades);
		tipo.setSize("150px", "22px");
		tipo.setDisplayField("nombre"); 
		tipo.setTypeAhead(true); 	
		tipo.setTriggerAction(TriggerAction.ALL);
		return tipo;	
	}

	public static synchronized ComboBox<IncertidumbreViewBean> getComboIncertidumbre(){

		if(incertidumbre!=null && incertidumbre.getModels().size()==0){

			combosService.getIncertidumbres(new AsyncCallback<List<IncertidumbreViewBean>>() {

				public void onFailure(Throwable caught) {
					//	Window.alert("FALLO");
				}

				public void onSuccess(List<IncertidumbreViewBean> result) {
					incertidumbre.removeAll();
					incertidumbre.add(result);
				}
			});
		}
		ComboBox <IncertidumbreViewBean>tipo=new ComboBox<IncertidumbreViewBean>();		
		
		tipo.setStore(incertidumbre);
		tipo.setSize("150px", "22px");
		tipo.setDisplayField("nombre"); 
		tipo.setTypeAhead(true); 	
		tipo.setTriggerAction(TriggerAction.ALL);
		return tipo;	
	}
	
	public static synchronized ComboBox<CategoriaViewBean> getComboCategorias(){

		if(categorias!=null && categorias.getModels().size()==0){

			combosService.getCategorias(new AsyncCallback<List<CategoriaViewBean>>() {

				public void onFailure(Throwable caught) {
					//	Window.alert("FALLO");
				}

				public void onSuccess(List<CategoriaViewBean> result) {
					categorias.removeAll();
					categorias.add(result);
				}
			});
		}
		ComboBox <CategoriaViewBean>tipo=new ComboBox<CategoriaViewBean>();		
		
		tipo.setStore(categorias);
		tipo.setSize("180px", "22px");
		tipo.setDisplayField("nombre"); 
		tipo.setTypeAhead(true); 	
		tipo.setTriggerAction(TriggerAction.ALL);
		return tipo;	
	}
	public static synchronized ComboBox<CategoriaViewBean> getComboSubCategorias(CategoriaViewBean selected){
		ComboBox <CategoriaViewBean>tipo=new ComboBox<CategoriaViewBean>();		
		tipo.setStore(subcategorias);
		tipo.setSize("180px", "22px");
		tipo.setDisplayField("nombre"); 
		tipo.setTypeAhead(true); 	
		tipo.setTriggerAction(TriggerAction.ALL);
		return tipo;	
	}
	public  static  synchronized ComboBox<ComplejidadrequisitoViewBean> getComplejidadCombo(){
		ComboBox <ComplejidadrequisitoViewBean> tipovia = new ComboBox<ComplejidadrequisitoViewBean>();
		tipovia.setTypeAhead(true); 
		tipovia.setDisplayField("nombre");
		if(complejidad.getModels().size()==0){
			combosService.getComplejidadRequisito(new AsyncCallback<List<ComplejidadrequisitoViewBean>>() {

				public void onFailure(Throwable caught) {
					//	Window.alert("FALLO");
				}

				public void onSuccess(List<ComplejidadrequisitoViewBean> result) {
					complejidad.removeAll();
					complejidad.add(result);
				}
			});
		}
		tipovia.setSize("180px", "22px");
		tipovia.setStore(complejidad);		
		tipovia.setTriggerAction(TriggerAction.ALL);
		return tipovia;
	}
	public synchronized static ComboBox<EstadorequisitoViewBean> getEstadosCombo(){
		ComboBox <EstadorequisitoViewBean> estadosCombo;
		

			estadosCombo = new ComboBox<EstadorequisitoViewBean>();
			estadosCombo.setTypeAhead(true); 
			estadosCombo.setEnabled(true);
			estadosCombo.setDisplayField("nombre");
			if(estados.getModels().size()==0){
				combosService.getEstadosRequisito(new AsyncCallback<List<EstadorequisitoViewBean>>() {

					public void onFailure(Throwable caught) {
						//	Window.alert("FALLO");
					}

					public void onSuccess(List<EstadorequisitoViewBean> result) {
						estados.removeAll();
						estados.add(result);
					}
				});
			}
			estadosCombo.setSize("180px", "22px");
			estadosCombo.setStore(estados);		
			estadosCombo.setTriggerAction(TriggerAction.ALL);
		
		return estadosCombo;
	}
	public  synchronized  static ComboBox<ProyectoViewBean> getCombosProyectos(){

		ComboBox <ProyectoViewBean> proyectosCombo;
			proyectosCombo = new ComboBox<ProyectoViewBean>();
			proyectosCombo.setTypeAhead(true); 
			proyectosCombo.setDisplayField("nombre"); 
			proyectosCombo.setTriggerAction(TriggerAction.ALL);
		
		if(proyectos.getModels().size()==0){
			combosService.getProyectos(new AsyncCallback<List<ProyectoViewBean>>() {

				public void onFailure(Throwable caught) {
					//	Window.alert("FALLO");
				}

				public void onSuccess(List<ProyectoViewBean> result) {
					proyectos.removeAll();
					proyectos.add(result);

				}
			});
		}
		
		proyectosCombo.setStore(proyectos);		
		return proyectosCombo;

	}
	public synchronized  static ComboBox<UsuarioViewBean> getComboUsuarios(){

		if(usuarios!=null && usuarios.getModels().size()==0){

			combosService.getUsuarios(new AsyncCallback<List<UsuarioViewBean>>() {

				public void onFailure(Throwable caught) {
					//	Window.alert("FALLO");
				}

				public void onSuccess(List<UsuarioViewBean> result) {
					usuarios.removeAll();
					usuarios.add(result);
				}
			});
		}
		ComboBox <UsuarioViewBean>tipo=new ComboBox<UsuarioViewBean>();		
		
		tipo.setStore(usuarios);
		tipo.setSize("150px", "22px");
		tipo.setDisplayField("nombre"); 
		tipo.setTypeAhead(true); 	
		tipo.setTriggerAction(TriggerAction.ALL);
		return tipo;	
	}
	public synchronized  static ComboBox<TipoRequisitoViewBean> getComboTipos(){

		if(tipos!=null && tipos.getModels().size()==0){

			combosService.getTipos(new AsyncCallback<List<TipoRequisitoViewBean>>() {

				public void onFailure(Throwable caught) {
					//	Window.alert("FALLO");
				}

				public void onSuccess(List<TipoRequisitoViewBean> result) {
					tipos.removeAll();
					tipos.add(result);
				}
			});
		}
		ComboBox <TipoRequisitoViewBean>tipo=new ComboBox<TipoRequisitoViewBean>();		
		
		tipo.setStore(tipos);
		tipo.setSize("180px", "22px");
		tipo.setDisplayField("nombre"); 
		tipo.setTypeAhead(true); 	
		tipo.setTriggerAction(TriggerAction.ALL);
		return tipo;	
	}
}
